package tempalate;

public abstract class AbstractMethod {

    final void cook() {
        this.pourOil();
        this.pourMaterial();
        if (isPourSauce()) this.pourSauce();
        this.fry();
    }

    //钩子方法，由子类控制是否执行某一个步骤，子类选择性重写
    public boolean isPourSauce(){
        return true;
    }

    abstract void pourSauce();

    abstract void fry();


     void pourMaterial() {
        System.out.println("放入原材料");
    }

    void pourOil() {
        System.out.println("往菜里倒油");
    }
}
